<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>mod_setenvif － Apache 2.2 中文手册 [金步国]</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
<body><div id="page-header">
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="index.html"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path"><a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">文档</a> &gt; <a href="../index.html">版本2.2</a> &gt; <a href="index.html">模块</a></div>

<div id="translation-info">　　 <a href="../translator_announcement.html#thanks">致谢</a> | 本篇译者：<a href="../../../index.html">金步国</a>(<a href="../../../index.html">作品集</a>) | 本页最后更新：2006年10月20日</div>
<div id="page-content"><div id="preamble"><h1>Apache模块 mod_setenvif</h1>

<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="module">
<tr><th><a href="module-dict.html#Description">说明</a></th><td>根据客户端请求头字段设置环境变量</td></tr>
<tr><th><a href="module-dict.html#Status">状态</a></th><td>基本(B)</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">模块名</a></th><td>setenvif_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">源文件</a></th><td>mod_setenvif.c</td></tr>
</table>
<h3>概述</h3>


    <p><code class="module"><a href="mod_setenvif.html">mod_setenvif</a></code>模块允许根据请求的不同方面匹配指定的正则表达式来设置环境变量。这些环境变量可由服务器的其他部分使用。</p>

    <p>指令按照他们在配置文件中出现的顺序生效。所以可以使用更多的复合序列，正如下例所示，如果浏览器是mozilla而非MSIE则会设置<code>netscape</code> 。</p>

<div class="example"><p><code>
  BrowserMatch ^Mozilla netscape<br />
  BrowserMatch MSIE !netscape<br />
</code></p></div>
</div>
<div class="top"><a href="mod_setenvif.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a> <a name="browsermatch" id="browsermatch">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>基于User-Agent头有条件地设置环境变量</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>] [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>基本(B)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_setenvif</td></tr>
</table>
  <p><code class="directive">BrowserMatch</code>只是<code class="directive"><a href="mod_setenvif.html#setenvif">SetEnvIf</a></code>的一种特殊情况，基于<code>User-Agent</code>头有条件地设置环境变量。下面的两行具有相同的效果：</p>
<div class="example"><p><code>
   BrowserMatchNoCase Robot is_a_robot<br />
   SetEnvIfNoCase User-Agent Robot is_a_robot<br />
</code></p></div>

    <p>更多的例子：</p>
<div class="example"><p><code>
    BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br />
    BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br />
    BrowserMatch MSIE !javascript<br />
</code></p></div>

</div>
<div class="top"><a href="mod_setenvif.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BrowserMatchNoCase" id="BrowserMatchNoCase">BrowserMatchNoCase</a> <a name="browsermatchnocase" id="browsermatchnocase">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>基于不区分大小写的User-Agent头有条件地设置环境变量</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>BrowserMatchNoCase  <em>regex [!]env-variable</em>[=<em>value</em>] [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>基本(B)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_setenvif</td></tr>
</table>

    <p><code class="directive">BrowserMatchNoCase</code>等同于<code class="directive"><a href="mod_setenvif.html#browsermatch">BrowserMatch</a></code> ，仅仅是进行不区分大小写的匹配。例如：</p>
<div class="example"><p><code>
    BrowserMatchNoCase mac platform=macintosh<br />
    BrowserMatchNoCase win platform=windows<br />
</code></p></div>

    <p><code class="directive">BrowserMatch</code>和<code class="directive">BrowserMatchNoCase</code>只是<code class="directive"><a href="mod_setenvif.html#setenvif">SetEnvIf</a></code>和<code class="directive"><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></code>的一种特殊情况。下面的两行具有相同的效果：</p>
<div class="example"><p><code>
   BrowserMatchNoCase Robot is_a_robot<br />
   SetEnvIfNoCase User-Agent Robot is_a_robot<br />
</code></p></div>

</div>
<div class="top"><a href="mod_setenvif.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SetEnvIf" id="SetEnvIf">SetEnvIf</a> <a name="setenvif" id="setenvif">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>根据客户端请求属性设置环境变量</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>SetEnvIf <em>attribute regex [!]env-variable</em>[=<em>value</em>] [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>基本(B)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_setenvif</td></tr>
</table>
    <p><code class="directive">SetEnvIf</code>指令根据客户端的请求属性设置环境变量。第一个参数<em>attribute</em>必须是下列三种类别之一：</p>

<ol>
<li>一个HTTP请求头域(参见<a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a>)；例如：<code>Host</code>, <code>User-Agent</code>, <code>Referer</code>, <code>Accept-Language</code> 。可以用一个正则表达式来进行匹配。</li>

<li>下列请求属性之一：
    <ul>
      <li><code>Remote_Host</code> 远程主机名(若可用)</li>

      <li><code>Remote_Addr</code> 远程主机IP地址</li>

      <li><code>Server_Addr</code> 接收到请求的服务器IP地址(2.0.43及以后版本)</li>

      <li><code>Request_Method</code> 所用的请求方法(<code>GET</code>, <code>POST</code>等等)</li>

      <li><code>Request_Protocol</code> 请求所使用的协议及其版本("HTTP/0.9", "HTTP/1.0", "HTTP/1.1"等)</li>

      <li><code>Request_URI</code> 在HTTP请求行中请求的资源(通常是URL中去除协议、主机以及查询字符串后剩余的部分)。</li>
    </ul>
</li>

<li>列出的与该请求关联的环境变量名字中的一个。这将允许<code class="directive">SetEnvIf</code>指令基于预先匹配的结果进行测试。只有那些由较早的<code>SetEnvIf[NoCase]</code>指令定义的环境变量才可以按照这种方式测试。"较早的"意思是它们在更上层的作用域(比如全局范围)中被定义或者在同一作用域中较早出现。只有在请求的属性未能得到匹配并且<em>attribute</em>没有使用正则表达式的时候，环境变量才会被考虑。</li>
</ol>

<p>第二个参数<em>regex</em>是一个<a class="glossarylink" href="../glossary.html#regex" title="see glossary">Perl兼容的正则表达式</a>。如果<em>regex</em>是根据<em>attribute</em>进行匹配的，那么剩余的参数将被评估。剩余的参数给出了需要设置的变量名及其可选的值。格式如下：</p>

    <ol>
      <li><code><em>varname</em></code></li>

      <li><code>!<em>varname</em></code></li>

      <li><code><em>varname</em>=<em>value</em></code></li>
    </ol>

    <p>第一个格式，环境变量<code><em>varname</em></code>的值将设为"1"。第二个格式将删除给定的变量<code><em>varname</em></code>(若存在)。第三个格式将为环境变量<code><em>varname</em></code>设置<code><em>value</em></code>的字面值。从2.0.51版开始，Apache能够识别<var>value</var>中出现的<code>$1</code>..<code>$9</code> ，并将其替换为<var>regex</var>中对应的使用括号括起来的子模式。</p>

	<div class="example"><h3>示例：</h3><p><code>

   SetEnvIf Request_URI "\.gif$" object_is_image=gif<br />
   SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br />
   SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br />
        :<br />
   SetEnvIf Referer www\.mydomain\.com intra_site_referral<br />
        :<br />
   SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br />
        :<br />
   SetEnvIf ^TS*  ^[a-z].*  HAVE_TS<br />
</code></p></div>

    <p>前面的三个将会设置<code>object_is_image</code>环境变量(如果请求的是图片)。第四个将会设置<code>intra_site_referral</code>环境变量(如果Referer头表明来自于<code>www.mydomain.com</code>)。</p>

    <p>最后一个将会设置环境变量<code>HAVE_TS</code>(如果包含任何以"TS"开始的请求头，并且该请求头的值是以小写字母[a-z]开头的)。</p>

	<h3>参见</h3>
<ul>
<li><a href="../env.html">Apache环境变量</a>，以获得更多例子。</li>
</ul>
</div>
<div class="top"><a href="mod_setenvif.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SetEnvIfNoCase" id="SetEnvIfNoCase">SetEnvIfNoCase</a> <a name="setenvifnocase" id="setenvifnocase">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>根据大小写无关的客户端请求属性设置环境变量</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>SetEnvIfNoCase <em>attribute regex [!]env-variable</em>[=<em>value</em>] [[!]<em>env-variable</em>[=<em>value</em>]] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>基本(B)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_setenvif</td></tr>
</table>

    <p><code class="directive">SetEnvIfNoCase</code>等同于<code class="directive"><a href="mod_setenvif.html#setenvif">SetEnvIf</a></code> ，仅仅是进行不区分大小写的匹配。例如：</p>
<div class="example"><p><code>
   SetEnvIfNoCase Host Apache\.Org site=apache
</code></p></div>

    <p>这会将环境变量<code>site</code>设置为"<code>apache</code>"(如果"<code>Host:</code>"请求头包含"<code>Apache.Org</code>"、"<code>apache.org</code>"等大小写变体)。</p>

</div>
</div>
<div id="footer">
<p class="apache">本文允许自由的转载、引用、再分发，但必须保留译者署名并注明出处；详见：<a href="../translator_announcement.html#announcement">版权声明</a>。</p>
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
